<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="hero-widgets flex_between c-fff">
            <div class="tool-item shou flex_center" @click="changeTab(0)">
              <img src="/static/images/video.svg" alt="savinginsta video" />
              <span class="f-16">Video</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(1)">
              <img src="/static/images/Photo.svg" alt="savinginsta photo" />
              <span class="f-16">Photo</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(2)">
              <img src="/static/images/Reels.svg" alt="savinginsta reels" />
              <span class="f-16">Reels</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(3)">
              <img src="/static/images/Story.svg" alt="savinginsta story" />
              <span class="f-16">Story</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(4)">
              <img src="/static/images/Igtv.svg" alt="savinginsta IGTV" />
              <span class="f-16">IGTV</span>
            </div>
          </div>
          <div class="banner-heading flex_ccenter">
            <div class="heading-item" v-show="current == 0">
              <h1 class="title fw700 f-42 c-fff">Muat Turun Video Instagram</h1>
              <h2 class="sub c-fff f-18 fw400">
                Muat turun Video Instagram, Foto, Kekili, Cerita dan IGTV
                Kandungan Dalam Talian
              </h2>
            </div>
            <div class="heading-item" v-show="current == 1">
              <nuxt-link to="/ms/instagram-photo-download">
                <div @click="goToTop('Photo')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Instagram Photo Downloader
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Masukkan URL FOTO Instagram di bawah
              </p>
            </div>
            <div class="heading-item" v-show="current == 2">
              <nuxt-link to="/ms/instagram-reels-video-download">
                <div @click="goToTop('reels')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Muat turun Instagram Reels
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Masukkan URL Instagram Reels di bawah
              </p>
            </div>
            <div class="heading-item" v-show="current == 3">
              <nuxt-link to="/ms/instagram-story-download">
                <div @click="goToTop('story')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Muat Turun Cerita Instagram
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Masukkan URL Instagram Stories di bawah
              </p>
            </div>
            <div class="heading-item" v-show="current == 4">
              <nuxt-link to="/ms/igtv-downloader">
                <div @click="goToTop('igtv')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Muat turun Video IGTV
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Masukkan URL IGTV Instagram di bawah
              </p>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                type="text"
                class="input f-18"
                v-model="input"
                @input="handleInput"
                @paste="handleInput"
                placeholder="Paste URL Instagram"
                list="fruits"
                name="fruit"
              />
              <datalist id="fruits">
                <option value="Apple"></option>
                <option value="Banana"></option>
                <option value="Cherry"></option>
              </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>Mendapatkan semula data, sila tunggu beberapa saat!</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Tapak ini tidak boleh memproses pautan anda kerana ia adalah
              peribadi
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Data yang anda masukkan bukan pautan. Sila masukkan pautan yang
              sah, untuk contoh:
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="title-box">
            <h3 class="title f-36 c-000 italic">Semua ciri Savinginsta.Com</h3>
            <p class="sub f-16 c-ccc">
              Savinginsta serasi dengan semua jenis video Instagram dan pautan
              imej.
            </p>
          </div>
          <div class="list-tools-pc">
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/ms">
                  <div @click="goToTop('video')" class="tItem">
                    <h4>Pemuat turun video Instagram</h4>
                  </div>
                </nuxt-link>
                <p>
                  Savinginsta direka untuk membolehkan anda memuat turun sendiri
                  kandungan daripada Instagram. Ia menawarkan sokongan untuk
                  memuat turun kedua-duanya individu dan berbilang video
                  daripada Insta.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  src="/static/images/instagram-video-downloader.webp"
                  alt="Instagram video downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  src="/static/images/instagram-video-downloader-app.webp"
                  alt="Instagram video downloader"
                />
              </div>
            </div>
            <div class="tool-box tool-reverse flex_between">
              <div class="tool-info">
                <nuxt-link to="/ms/instagram-photo-download">
                  <div @click="goToTop('Photo')" class="tItem">
                    <h4>Pemuat turun foto Instagram</h4>
                  </div>
                </nuxt-link>
                <p>
                  Pemuat Turun Foto Instagram Savinginsta menjadikannya mudah
                  untuk menyimpan sebarang foto tunggal atau berbilang, termasuk
                  kolaj, daripada Instagram. Dengan alat ini, memuat turun
                  siaran individu imej atau koleksi gambar Instagram adalah
                  mudah dan terus terang.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/instagram-photo-downloader.webp"
                  alt="Instagram photo downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/instagram-photo-downloader-app.webp"
                  alt="Instagram photo downloader"
                />
              </div>
            </div>
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/ms/instagram-reels-video-download">
                  <div @click="goToTop('reels')" class="tItem">
                    <h4>Muat turun Instagram Reels</h4>
                  </div>
                </nuxt-link>
                <p>
                  Pemuat turun Gelendong Instagram Savinginsta membolehkan anda
                  muat turun video Reels daripada siaran Instagram ke peranti
                  anda, menyediakan penyelesaian mudah di mana Instagram sendiri
                  tidak menawarkan sokongan untuk fungsi ini.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/download-instagram-reels.webp"
                  alt="Download Instagram Reels"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/download-instagram-reels-app.webp"
                  alt="Download Instagram Reels"
                />
              </div>
            </div>
            <div class="tool-box tool-reverse flex_between">
              <div class="tool-info">
                <nuxt-link to="/ms/igtv-downloader">
                  <div @click="goToTop('igtv')" class="tItem">
                    <h4>Pemuat turun IGTV</h4>
                  </div>
                </nuxt-link>
                <p>
                  Cerita Instagram menawarkan platform tersendiri untuk pengguna
                  berkongsi pengalaman harian mereka melalui foto dan video
                  dengan a khalayak ramai. Kadangkala, anda mungkin ingin
                  menyimpan kegemaran cerita, tetapi fungsi ini tidak tersedia
                  dalam apl. Savinginsta menangani isu ini dengan menyediakan
                  penyelesaian yang membolehkan pengguna memuat turun dan
                  melihat cerita Instagram dengan mudah luar talian, memastikan
                  kandungan yang tidak dapat dilupakan tidak akan hilang.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/igtv-downloader.webp"
                  alt="IGTV downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/igtv-downloader-app.webp"
                  alt="IGTV downloader"
                />
              </div>
            </div>
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/ms/instagram-story-download">
                  <div @click="goToTop('story')" class="tItem">
                    <h4>Pemapar Cerita Instagram</h4>
                  </div>
                </nuxt-link>
                <p>
                  IGTV menawarkan video berpanjangan, dan jika anda tidak dapat
                  melakukannya melihatnya dengan segera, anda mempunyai pilihan
                  untuk memuat turunnya Video IGTV ke PC anda. Ini membolehkan
                  anda dengan mudah lawati semula dan nikmatinya kemudian,
                  walaupun tanpa internet sambungan, dan menghapuskan
                  kebimbangan tentang kandungan IGTV sedang dialih keluar atau
                  tidak tersedia.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/instagram-story-download.webp"
                  alt="Instagram Story Download"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/instagram-story-download-app.webp"
                  alt="Instagram Story Download"
                />
              </div>
            </div>
          </div>
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                Muat turun dengan apl Insta Downloader
              </h3>
              <p class="f-16 c-ccc">
                Apl kami menawarkan penyelesaian pantas dan mudah untuk memuat
                turun video Instagram, menyediakan video berkualiti HD tanpa
                tera air.
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="Download app " />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="Download app " />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              SAVINGINSTA - MUAT TURUN INSTAGRAM ALAT TERBAIK
            </h3>
            <p class="f-16 c-ccc">
              Savinginsta menonjol sebagai pemuat turun Instagram peringkat
              teratas, direka dengan pakar untuk memuat turun kandungan
              berkualiti tinggi dengan pantas daripada Instagram. Apabila
              mencari kaedah yang paling berkesan untuk memuat turun Media
              Instagram, Savinginsta downloader muncul sebagai peneraju
              penyelesaian pihak ketiga.
            </p>
            <p class="f-16 c-ccc">
              Instagram, terkenal sebagai aplikasi perkongsian foto paling
              popular di dunia, menyaksikan muat naik berjuta-juta gambar setiap
              hari. Untuk yang demikian seketika, keperluan untuk memuat turun
              video Instagram menjadi jelas, menyediakan penyelesaian yang
              lancar untuk keperluan segera anda. Alat ini penting untuk sesiapa
              sahaja yang ingin mengekalkannya kandungan Instagram kegemaran
              dengan cekap.
            </p>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              Ciri-ciri Savinginsta Instagram Video Downloader:
            </h3>
            <div class="attributes-list flex_between">
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Muat turun video Instagram Pantas, mudah dan selamat.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Anda boleh log keluar dari akaun Instagram anda.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Dengan hanya satu klik butang, anda boleh memuat turun imej
                  Instagram dan video.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Muat turun dan simpan imej dan video dalam ketinggian asalnya
                  definisi dan kualiti.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Daripada akaun peribadi, muat turun dan simpan video
                  Instagram.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Kelajuan tinggi: Buat masa ini, Savinginsta menawarkan yang
                  terpantas kelajuan muat turun.
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Cara menggunakan Savinginsta Instagram Downloader untuk
                menyimpan dari IG
              </h3>
              <div class="note c-ccc f-16">
                Nota: Pastikan video atau foto Instagram yang anda inginkan muat
                turun adalah daripada akaun awam.
              </div>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Langkah01:</span>
                  <span class="f-16 c-000"
                    >Salin URL Foto & Video Instagram</span
                  >
                </div>
                <div class="app-step">
                  <div class="fw700 c-000 f-16">Pada Apl Instagram:</div>
                  <div class="c-000 f-16">
                    Untuk iOS: Ketik untuk mendapatkan URL foto Instagram.
                  </div>
                  <div class="c-000 f-16">
                    Untuk Android: Klik di atas siaran dan pilih 'Salin URL
                    Instagram', kemudian tekan 'Salin URL Kongsi'. Pautan akan
                    menjadi disalin ke papan keratan anda.
                  </div>
                  <div class="fw700 c-000 f-16">- Pada PC/Mac:</div>
                  <div class="c-000 f-16">
                    Klik kanan pada tarikh video atau foto Instagram dan pilih
                    "Salin Alamat Pautan" untuk memuat turun kandungan Instagram
                    desktop anda.
                  </div>
                </div>
              </div>
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Langkah02:</span>
                  <span class="f-16 c-000">
                    Tampalkan URL ke dalam Savinginsta.App</span
                  >
                </div>
                <div class="app-step">
                  <div class="c-000 f-16">
                    Navigasi ke Savinginsta.App - Instagram khusus pemuat turun.
                  </div>
                  <div class="c-000 f-16">
                    Salin dan tampal URL yang disalin ke dalam medan teks yang
                    diberikan.
                  </div>
                </div>
              </div>
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Langkah03:</span>
                  <span class="f-16 c-000">Mulakan Muat Turun</span>
                </div>
                <div class="app-step">
                  <div class="c-000 f-16">
                    Klik butang "Muat Turun" untuk memulakan video Instagram
                    atau proses muat turun foto.
                  </div>
                  <div class="fw700 c-000 f-16">
                    Maklumat Penggunaan Penting
                  </div>
                  <div class="c-000 f-16">
                    Savinginsta direka terutamanya untuk memuat turun video dan
                    gambar dari akaun Instagram anda sendiri.
                  </div>
                  <div class="c-000 f-16">
                    Kami mengutamakan privasi pengguna dan berhak untuk menolak
                    perkhidmatan jika alat kami digunakan untuk melanggar orang
                    lain privasi atau untuk mengakses bahan yang tidak
                    dibenarkan.
                  </div>
                </div>
              </div>
            </div>
            <div class="user-note f-16">
              <div class="app-tip"></div>
              Untuk pemahaman yang menyeluruh tentang dasar kami

              <a class="fw700 c-blue" href="/terms-of-service">
                sila baca Syarat Perkhidmatan penuh kami di sini.</a
              >
            </div>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">Alatan</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li @click="goToTools('story')">
                    <nuxt-link to="/ms/instagram-story-download"
                      >Instagram Story Downloader</nuxt-link
                    >
                  </li>
                  <li @click="goToTools('reels')">
                    <nuxt-link to="/ms/instagram-reels-video-download"
                      >Instagram Reels Downloader</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="https://savingtik.com/" target="_blank"
                      >Pemuat turun Tiktok</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Sokongan</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> Kenalan </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">sah</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      Syarat Perkhidmatan
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> Dasar Privasi </nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >Kami tidak bergabung dengan Instagram atau Meta</b
            >
            <div class="c-ccc f-16">
              © {{new Date().getFullYear()}} Insta Downloader All rights reserved.
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";

export default {
  components: { pageHeader, SuccessContent },
  name: "IndexPage",
  head: {
    htmlAttrs: {
      lang: "ms",
    },
    bodyAttrs: {
      "data-lang": "ms",
    },
    title:
      "Instagram Downloader - Muat turun Video Instagram dalam talian - Savinginsta",
    meta: [
      { property: "og:locale", content: "ms" },
      //Page Information
      {
        name: "description",
        content:
          "Savinginsta: Muat turun video, gulungan dan foto Instagram dengan mudah menggunakan alat mesra pengguna kami. Simpan video Instagram anda dengan cepat dan selamat pada mana-mana peranti.",
      },
      //Schema.org Microdata
      {
        itemprop: "name",
        content:
          "Instagram Downloader - Muat turun Video Instagram dalam talian - Savinginsta",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content:
          "Instagram Downloader - Muat turun Video Instagram dalam talian - Savinginsta",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/ms" },

      {
        property: "og:description",
        content:
          "Savinginsta: Muat turun video, gulungan dan foto Instagram dengan mudah menggunakan alat mesra pengguna kami. Simpan video Instagram anda dengan cepat dan selamat pada mana-mana peranti.",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/ms" },
      {
        name: "twitter:title",
        content:
          "Instagram Downloader - Muat turun Video Instagram dalam talian - Savinginsta",
      },
      {
        name: "twitter:description",
        content:
          "Savinginsta: Muat turun video, gulungan dan foto Instagram dengan mudah menggunakan alat mesra pengguna kami. Simpan video Instagram anda dengan cepat dan selamat pada mana-mana peranti.",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
      {
        itemprop: "image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
      {
        property: "og:image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
      {
        name: "twitter:image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/ms",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/ms",
      },
    ],
    script: [
      {
        json: {
          "@context": "https://schema.org",
          "@type": "WebSite",
          name: "Instagram Downloader - Muat turun Video Instagram dalam talian - Savinginsta",
          url: "https://savinginsta.com",
          description:
            "Savinginsta: Muat turun video, gulungan dan foto Instagram dengan mudah menggunakan alat mesra pengguna kami. Simpan video Instagram anda dengan cepat dan selamat pada mana-mana peranti.",
          publisher: {
            "@type": "Organization",
            name: "Savinginsta",
            logo: {
              "@type": "ImageObject",
              url: "https://savinginsta.com/static/images/logo.webp",
            },
          },
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `Apakah itu Instagram Video Downloader?`,
          content: `Instagram Video Downloader ialah alat berasaskan web yang direka untuk menyimpan foto, video dan kandungan IGTV Instagram untuk kegunaan kemudian. Savinginsta menonjol sebagai pilihan utama untuk memuat turun kandungan daripada Instagram dengan mudah.`,
        },
        {
          title: `Adakah Log Masuk ke Akaun Instagram Saya Perlu untuk Menggunakan Savinginsta?`,
          content: `Tidak, tidak perlu log masuk ke akaun Instagram anda. Savinginsta memastikan muat turun yang selamat dan tanpa nama daripada Instagram tanpa memerlukan sebarang maklumat peribadi.`,
        },
        {
          title: `Bolehkah saya Simpan Video secara Terus daripada Instagram?`,
          content: `Memuat turun terus video daripada suapan Instagram anda atau cerita orang lain tidak boleh dilakukan melalui Instagram itu sendiri. Walau bagaimanapun, Savinginsta menawarkan penyelesaian yang mudah. Hanya layari laman web mereka di https://savinginsta.com dan ikuti arahan mudah yang diberikan.`,
        },
        {
          title: `Adakah Perkhidmatan Muat Turun Video & Foto Instagram Percuma?`,
          content: `Ya, Savinginsta menyediakan perkhidmatan ini secara percuma sepenuhnya, tanpa had pada bilangan muat turun.`,
        },
        {
          title: `Bolehkah saya Muat Turun Kandungan daripada Akaun Instagram Peribadi?`,
          content: `Sesungguhnya, Savinginsta membenarkan anda memuat turun video, cerita dan foto daripada akaun Instagram peribadi. Arahan terperinci tersedia di platform mereka.`,
        },
        {
          title: `Adakah Mungkin untuk Menyimpan Cerita Instagram?`,
          content: `betul-betul. Dengan Savinginsta, anda boleh melihat dan memuat turun mana-mana cerita Instagram. Cuma klik pada tiga titik (⁝) dalam cerita, salin pautan dan tampalkannya ke dalam Savinginsta untuk memulakan muat turun.`,
        },
        {
          title: `Adakah Savinginsta Menyokong Muat Turun pada Komputer?`,
          content: `Ya, Savinginsta serasi sepenuhnya dengan PC, membolehkan anda memuat turun video, foto, cerita Instagram dan banyak lagi terus ke komputer anda.`,
        },
        {
          title: `Bolehkah saya Menggunakan Savinginsta untuk Muat Turun dari Instagram pada Peranti Android?`,
          content: `Sudah tentu. Untuk pengguna Android, hanya salin pautan siaran Instagram, tampalkannya ke dalam Savinginsta, dan simpan. Untuk butiran lanjut, lawati panduan mereka tentang memuat turun daripada Instagram pada Android.`,
        },
        {
          title: `Bagaimana Saya Boleh Muat Turun Video dan Foto Instagram pada iPhone/iPad (iOS)?`,
          content: `Savinginsta telah mencipta panduan langkah demi langkah yang mesra pengguna untuk memuat turun pelbagai jenis video ke iPhone atau iPad anda. Ikuti pautan ini untuk mendapatkan arahan: Muat turun Video Instagram pada iPhone.`,
        },
        {
          title: `Bagaimana Jika Video Instagram Dimainkan Daripada Muat Turun?`,
          content: `Untuk menyelesaikan masalah ini, klik kanan pada video dan pilih 'Simpan Sebagai...' untuk memilih lokasi simpan yang anda inginkan, bukannya klik kiri.`,
        },
        {
          title: `Di manakah Video Disimpan Selepas Muat Turun?`,
          content: `Video yang dimuat turun biasanya disimpan dalam folder 'Muat Turun' pada kedua-dua peranti mudah alih Android dan PC.`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);

    //到达首页
    handleClick("guide_homepage_frist", {});
    handleClick("guide_homepage", {});
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "video",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "video",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "video",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "video",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "video",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "video",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },

    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "photo",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "photo",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
    goToTop(site) {
      //切换页面
      handleClick("action_page_switch", {
        site: site,
        from: top,
      });
    },
    goToTools(site) {
      //切换页面
      handleClick("action_page_switch", {
        site: site,
        from: tools,
      });
    },
  },
};
</script>
<style lang="scss" scoped>
@import "@/static/style/index.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
